﻿using log4net;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CAD
{
    public class DAOMensajexUsuario:DAO 
    {
        ILog logger = LogManager.GetLogger(typeof(DAOMensaje));     


       #region Attributes
       private static DAOMensajexUsuario singleton;
       #endregion 

        #region Singleton
        public static DAOMensajexUsuario Instance()
        {
            if (singleton == null)
            {
                singleton = new DAOMensajexUsuario();
            }
            return singleton;
        }
        protected DAOMensajexUsuario()
        {
        }
        #endregion 

        #region Querys
        public List<DTOMensajexUsuario> SelectPorUsuario(string ususario)
        {
            using (DbCommand cmd = defaultDB.GetStoredProcCommand("mensaje_MensajePorUsuario"))
            {
                defaultDB.AddInParameter(cmd, "@idreceptor", DbType.String, ususario);
                using (IDataReader reader = defaultDB.ExecuteReader(cmd))
                {
                    logger.Info("Se ejecuto el procedimiento exitosamente");
                    return CargarLista(reader);
                }
            }
        }
        #endregion


        #region DML
        public void Insertar(DTOMensajexUsuario data)
        {
            DbCommand cmd = defaultDB.GetStoredProcCommand("mensajexusuario_insert");
            defaultDB.AddInParameter(cmd, "idemisor", DbType.String, data.IDEmisor);
            defaultDB.AddInParameter(cmd, "idreceptor", DbType.String, data.IDReceptor);
            defaultDB.AddInParameter(cmd, "idmensaje", DbType.Int32, data.IDMensaje1.IDMensaje);
            defaultDB.AddInParameter(cmd, "estado", DbType.String, false);
            defaultDB.ExecuteNonQuery(cmd); 
        }
        public void ActualizarEstado(DTOMensajexUsuario data)
        {
            DbCommand cmd = defaultDB.GetStoredProcCommand("mensajexusuario_update");
            defaultDB.AddInParameter(cmd, "@idemisor", DbType.String, data.IDEmisor);
            defaultDB.AddInParameter(cmd, "@idreceptor", DbType.String, data.IDReceptor);
            defaultDB.AddInParameter(cmd, "@idmensaje", DbType.Int32, data.IDMensaje1.IDMensaje);
            defaultDB.AddInParameter(cmd, "@estado", DbType.Boolean, true);
            defaultDB.ExecuteNonQuery(cmd);
        }
        public void Eliminar(DTOMensajexUsuario data)
        {
            DbCommand cmd = defaultDB.GetStoredProcCommand("mensajexusuario_delete");
            defaultDB.AddInParameter(cmd, "idmensaje", DbType.String, data.IDMensaje1.IDMensaje);
             defaultDB.AddInParameter(cmd, "@idreceptor", DbType.String, data.IDReceptor);
             defaultDB.AddInParameter(cmd, "@idemisor", DbType.String, data.IDEmisor);
             defaultDB.ExecuteNonQuery(cmd);
        }
        #endregion

        #region Helpers
        private List<DTOMensajexUsuario> CargarLista(IDataReader reader)
        {
            List<DTOMensajexUsuario> list = new List<DTOMensajexUsuario>();
            while (reader.Read())
            {
                list.Add(CargarItem(reader));
            }
            return list;
        }
        private DTOMensajexUsuario CargarItem(IDataReader reader)
        {
            DTOMensajexUsuario item = new DTOMensajexUsuario();
            DTOMensaje itemensaje = new DTOMensaje();
            itemensaje.IDMensaje = reader.GetInt32(0);
            itemensaje.Asunto = reader.GetString(1);
            itemensaje.Contenido = reader.GetString(2);
            item.IDMensaje1 = itemensaje;
            item.IDEmisor = reader.GetString(3);
            item.IDReceptor = reader.GetString(4);
            item.Estado =Convert.ToBoolean(reader.GetValue(5));
            return item;
        }
        #endregion
    }
}
